=begin
  Questao 1.
=end
def newton_square_root(value)
	aprox = value/2.0
  begin
    err = (aprox**2-value).abs
    aprox = (aprox + (value/aprox)) / 2.0
    puts "Aprox: #{aprox}"
    puts "Parada: #{err}"
    sleep(3)
  end while err > 0.0000001
  return aprox
end

=begin
  Questao 2. Lê um numero inteiro poitivo e calcula a sequencia
    se o numero for par, dividi por 2.
    se o numero for impar, multiplica 3 e soma 1.
    repetir ate alcançar o valor 1.
=end
def sequence(value)
  puts "Valor inicial: #{value}"
  while value > 1
    if value%2 == 0
      value = value / 2
    else
      value = value * 3 + 1
    end
    puts "Next: #{value}"
    sleep(1)
  end
end

=begin
  Questao 3. Faça um programa que le tres valores: capital, taxa de juros(percentual) e período(em anos).
  Computar o capital mais os juros compostos ate o fim do periodo.

  a cada ano o valor do capital e dado por
  novo_capital = capital + capital * taxa / 100

  mostre uma tabela com o valor dos juros e o capital a cada ano.
=end
def calcula_juros(capital, taxa, periodo)
	novo_capital = capital + (capital*(taxa/100))
  puts "+---------------------+---------------------+-----------+"
  puts "| Periodo             | Capital             | Taxa      |"
  puts "+---------------------+---------------------+-----------+"
  while periodo > 0
    puts "| #{periodo.to_s.ljust(20)}| #{novo_capital.to_s.ljust(20)}| #{taxa.to_s.ljust(10)}|"
    novo_capital = novo_capital + (novo_capital*(taxa/100.0))
    periodo = periodo - 1
  end
  puts "+---------------------+---------------------+-----------+"
end

########
# MAIN #
########
begin
  puts "Digite a questão: [limit 3]"
  opcao = gets
  case opcao.to_i
  when 1
    puts "\tCalcula a raiz quadrada de um número com o método de Newton"
    puts "Digite o valor a calcular:"
    value = gets.to_f
    q = newton_square_root(value)
    puts "A raiza de #{value} é aproximadamente #{q}"
  when 2
    puts "\tCalcula a sequencia a partir de um numero inteiro positivo."
    puts "Digite um numero inteiro positivo: "
    value = gets.to_i
    sequence(value)
  when 3
    puts "\tComputar o capital mais os juros compostos ate o fim do periodo."
    puts "Digite capital, taxa, periodo: "
    capital = gets.to_f
    taxa = gets.to_f
    periodo = gets.to_i
    calcula_juros(capital, taxa, periodo)
  else
    puts "Escolha errada."
  end
end
